package com.coderman.infosys.plat.auth.common.page;

import com.coderman.infosys.plat.auth.common.bo.BaseBO;
import com.coderman.infosys.plat.auth.common.query.BaseQueryObj;
import lombok.Builder;
import lombok.Data;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
* Description:参考Mybatis_PageHelper的Page对象封装的DTO
* date: 2021/10/26
* 这里我们把查询的范型对象与dto的查询请求对象弄成一致，相当于查询对象不再以DTO命名，
 * 这样在领域层实现的时候不会显得特别突兀，同时可以起到一种让领域层睁一只眼闭一只眼去关注dto,bo,do之间的职责层次关系
 *
 * 在底层的话mapp依赖的依然是QueryObj而不是DO或者DTO
 * 当然更深层次的原因会在公众号上讨论
* @author shenshuai
* @version 1.0.0
* @since JDK 1.8
*/
@Data
@Builder
public class PageBO<E extends BaseBO,Q extends BaseQueryObj> implements Serializable {

    private static final long serialVersionUID = -2470832822882514457L;

    /**
     * 页码，从1开始
     */
    private int currentPageNum;

    /**
     * 当前页的下一页
     */
    private int nextPageNum;

    /**
     * 当前页的上一页
     */
    private int prePageNum;
    /**
     * 页面大小
     */
    private int pageSize;
    /**
     * 起始行
     */
    private int startRow;
    /**
     * 末行
     */
    private int endRow;
    /**
     * 总数
     */
    private long totalRows;
    /**
     * 总页数
     */
    private int totalPages;
    /**
     * 包含count查询
     */
    private boolean count = true;
    /**
     * 分页合理化
     */
    private Boolean reasonable;
    /**
     * 当设置为true的时候，如果pagesize设置为0（或RowBounds的limit=0），就不执行分页，返回全部结果
     */
    private Boolean pageSizeZero;
    /**
     * 进行count查询的列名
     */
    private String countColumn;
    /**
     * 排序
     */
    private String orderBy;
    /**
     * 只增加排序
     */
    private boolean orderByOnly;

    /**
     * 查询对象返回的数据
     */
    private List<E> Items;


    /**
     * 针对简单场景 参数的查询map处理
     */
    private Map<String, Object> queryMap;

    /**
     * 针对复杂场景 参数的查询queryObj对象处理
     */
    private Q queryObj;


}


